using System;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using SystemFrameworks;
using Microsoft.ApplicationBlocks.Data;
using Common;
using SystemFrameworks;
using MinCultura.Sipa.DataAccess.EntidadesArtes;

namespace MinCultura.Sipa.EntidadesArtes
{
	/// <summary>
	/// Summary description for SolicitudCambioPropietario Entidades.
	/// </summary>
	public class SolicitudCambioPropietario
	{
        public SolicitudCambioPropietario(string strCadenaConecxion)
        {
            ConnectionString = strCadenaConecxion;
        }

        private string _cadenaConexion;

        public string ConnectionString
        {
            get { return _cadenaConexion; }
            set { _cadenaConexion = value; }
        }

		#region - Parametros

		public const string SOL_ID_PARAM = "@SOL_ID";
		public const string ENT_ID_PARAM = "@ENT_ID";
		public const string USU_ID_PARAM = "@USU_ID";
		public const string ARE_ID_PARAM = "@ARE_ID";
		public const string SOL_NOMBRE_PARAM = "@SOL_NOMBRE";
		public const string SOL_TELEFONO_PARAM = "@SOL_TELEFONO";
		public const string SOL_CORREO_ELECTRONICO_PARAM = "@SOL_CORREO_ELECTRONICO";
		public const string SOL_RELACION_PARAM = "@SOL_RELACION";
		public const string SOL_ESTADO_PARAM = "@SOL_ESTADO";
		public const string SOL_OBSERVACIONES_PARAM = "@SOL_OBSERVACIONES";
		public const string SOL_FECHA_REGISTRO_PARAM = "@SOL_FECHA_REGISTRO";
		public const string SOL_FECHA_PROCESO_PARAM = "@SOL_FECHA_PROCESO";
		public const string SOL_SERVICIO_PARAM = "@SOL_SERVICIO";

		//CONSULTAS
		public const string ENT_NOMBRE_PARAM = "@ENT_NOMBRE";
		public const string FECHA_INI_PARAM = "@FECHA_INI";
		public const string FECHA_FIN_PARAM = "@FECHA_FIN";
		public const string FECHA_OPE_PARAM = "@FECHA_OPE";
		public const string SOL_AREAS_PARAM = "@SOL_AREAS";

		#endregion
		
		public bool Adicionar(SolicitudCambioPropietarioData datos,params SqlTransaction[] transaction)
		{				
			bool respuesta = false;

			if (datos.Rows.Count > 0)
			{
				foreach (DataRow row in datos.Rows)
				{
					SqlParameter param1 = new SqlParameter(ENT_ID_PARAM, row[SolicitudCambioPropietarioData.ENT_ID_FIELD]);
					SqlParameter param2 = new SqlParameter(USU_ID_PARAM, row[SolicitudCambioPropietarioData.USU_ID_FIELD]);
					SqlParameter param3 = new SqlParameter(ARE_ID_PARAM, row[SolicitudCambioPropietarioData.ARE_ID_FIELD]);
					SqlParameter param4 = new SqlParameter(SOL_NOMBRE_PARAM, row[SolicitudCambioPropietarioData.SOL_NOMBRE_FIELD]);
					SqlParameter param5 = new SqlParameter(SOL_TELEFONO_PARAM, row[SolicitudCambioPropietarioData.SOL_TELEFONO_FIELD]);
					SqlParameter param6 = new SqlParameter(SOL_CORREO_ELECTRONICO_PARAM, row[SolicitudCambioPropietarioData.SOL_CORREO_ELECTRONICO_FIELD]);
					SqlParameter param7 = new SqlParameter(SOL_RELACION_PARAM, row[SolicitudCambioPropietarioData.SOL_RELACION_FIELD]);
					SqlParameter param8 = new SqlParameter(SOL_ESTADO_PARAM, row[SolicitudCambioPropietarioData.SOL_ESTADO_FIELD]);
					SqlParameter param9 = new SqlParameter(SOL_OBSERVACIONES_PARAM, row[SolicitudCambioPropietarioData.SOL_OBSERVACIONES_FIELD]);
					SqlParameter param10 = new SqlParameter(SOL_FECHA_REGISTRO_PARAM, row[SolicitudCambioPropietarioData.SOL_FECHA_REGISTRO_FIELD]);
					SqlParameter param11 = new SqlParameter(SOL_FECHA_PROCESO_PARAM,row[SolicitudCambioPropietarioData.SOL_FECHA_PROCESO_FIELD]);

					if (row[SolicitudCambioPropietarioData.SOL_TELEFONO_FIELD] == null || row[SolicitudCambioPropietarioData.SOL_TELEFONO_FIELD].ToString() == "")
						param5.Value = DBNull.Value;
					if (row[SolicitudCambioPropietarioData.SOL_RELACION_FIELD] == null || row[SolicitudCambioPropietarioData.SOL_RELACION_FIELD].ToString() == "")
						param7.Value = DBNull.Value;
					if (row[SolicitudCambioPropietarioData.SOL_ESTADO_FIELD] == null || row[SolicitudCambioPropietarioData.SOL_ESTADO_FIELD].ToString() == "")
						param8.Value = DBNull.Value;
					if (row[SolicitudCambioPropietarioData.SOL_OBSERVACIONES_FIELD] == null || row[SolicitudCambioPropietarioData.SOL_OBSERVACIONES_FIELD].ToString() == "")
						param9.Value = DBNull.Value;
					if (row[SolicitudCambioPropietarioData.SOL_FECHA_PROCESO_FIELD] == null || row[SolicitudCambioPropietarioData.SOL_FECHA_PROCESO_FIELD].ToString() == "")
						param11.Value = DBNull.Value;

					SqlParameter[] parameters = {param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11};

					try
					{	
						if (transaction.Length > 0)
							SqlHelper.ExecuteNonQuery(transaction[0], CommandType.StoredProcedure, "PAS_ADICIONAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_ENTIDADES",parameters);
						else
							SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "PAS_ADICIONAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_ENTIDADES",parameters);									
					}
					catch (SqlException sqlEx)
					{
						throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ADICIONAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_ENTIDADES"), sqlEx);
					}
					catch (Exception ex)
					{
						throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
					}				
				}
				respuesta = true;
			}
			return respuesta;
		}
		
		public bool Actualizar(SolicitudCambioPropietarioData datos,params SqlTransaction[] transaction)
		{
			int cant=0;
			bool response=false;
			
			foreach (DataRow row in datos.Rows)
			{
				SqlParameter param1 = new SqlParameter(SOL_ID_PARAM, row[SolicitudCambioPropietarioData.SOL_ID_FIELD]);				
				SqlParameter param2 = new SqlParameter(SOL_ESTADO_PARAM, row[SolicitudCambioPropietarioData.SOL_ESTADO_FIELD]);
				SqlParameter param3 = new SqlParameter(SOL_OBSERVACIONES_PARAM, row[SolicitudCambioPropietarioData.SOL_OBSERVACIONES_FIELD]);			
				SqlParameter param4 = new SqlParameter(SOL_FECHA_PROCESO_PARAM,row[SolicitudCambioPropietarioData.SOL_FECHA_PROCESO_FIELD]);
							
				if (row[SolicitudCambioPropietarioData.SOL_OBSERVACIONES_FIELD] == DBNull.Value || row[SolicitudCambioPropietarioData.SOL_OBSERVACIONES_FIELD].ToString() == "")
					param3.Value = DBNull.Value;				
				if (row[SolicitudCambioPropietarioData.SOL_FECHA_PROCESO_FIELD] == DBNull.Value || row[SolicitudCambioPropietarioData.SOL_FECHA_PROCESO_FIELD].ToString() == "")
					param4.Value = DBNull.Value;

				SqlParameter[] parameters = { param1, param2, param3, param4 };

				try
				{
					if (transaction.Length>0)
						cant += SqlHelper.ExecuteNonQuery(transaction[0], CommandType.StoredProcedure,"PAS_ACTUALIZAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_ENTIDADES", parameters);
					else
						cant += SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,"PAS_ACTUALIZAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_ENTIDADES", parameters);									
				}
				catch (SqlException sqlEx)
				{
					throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ACTUALIZAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_ENTIDADES"), sqlEx);
				}
				catch (Exception ex)
				{
					throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorActualizar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
				}
				if (cant>0)
					response = true;
				else
					response = false;
			}
			return response;
		}
		
		public bool Consultar(decimal tEntId,byte tEstado)
		{			
			bool response = false;
			SqlParameter param1 = new SqlParameter(ENT_ID_PARAM, tEntId);				
			SqlParameter param2 = new SqlParameter(SOL_ESTADO_PARAM, tEstado);

			SqlParameter[] parameters = {param1,param2};
			int intTemp = 0;
			try
			{
				intTemp = Convert.ToInt32(SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "PAS_CONSULTAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_ENTIDADES_ESTADO",parameters));
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_CONSULTAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_ENTIDADES_ESTADO"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorConsultar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
			}

			if (intTemp!=0)
				response = true;

			return response;
		}

		public SolicitudCambioPropietarioData Consultar(decimal tARE_ID,byte tEstado, string tNombreSol, string tNombreEnt,byte tFechaIniOpe,int tServicio,int[] IdsAreas,params DateTime[] tFechas)
		{			
			SolicitudCambioPropietarioData response = new SolicitudCambioPropietarioData();

			SqlParameter param1 = new SqlParameter(ARE_ID_PARAM, tARE_ID);
				if (tARE_ID==0)param1.Value = DBNull.Value;
			SqlParameter param2 = new SqlParameter(SOL_ESTADO_PARAM, tEstado);
				if (tEstado==0)param2.Value = DBNull.Value;
			SqlParameter param3 = new SqlParameter(SOL_NOMBRE_PARAM, tNombreSol);
				if (tNombreSol.Length == 0)param3.Value = DBNull.Value;
			SqlParameter param4 = new SqlParameter(ENT_NOMBRE_PARAM, tNombreEnt);
				if (tNombreEnt.Length == 0)param4.Value = DBNull.Value;
			SqlParameter param5 = new SqlParameter(FECHA_INI_PARAM,tFechas[0]);
			SqlParameter param6 = new SqlParameter(FECHA_OPE_PARAM, tFechaIniOpe);			
			SqlParameter param7 = new SqlParameter(FECHA_FIN_PARAM, DBNull.Value);						
			if (tFechas.Length>1)
			{				
				param7.Value = tFechas[1];																	
			}	

			// -- Areas --
			SqlParameter param8 = new SqlParameter(SOL_AREAS_PARAM, DBNull.Value);
			if (IdsAreas.Length>0)
			{
				StringBuilder strAreas = new StringBuilder();				
				foreach(int dcId in IdsAreas)
				{						
					strAreas.Append(dcId.ToString());
					strAreas.Append(",");
				}				
				param8.Value = strAreas.ToString();
			}			

			SqlParameter[] parameters = {param1,param2,param3,param4,param5,param6,param7,param8};
			try
			{
				SqlHelper.ExecuteDataTable(ConnectionString, CommandType.StoredProcedure, "PAS_CONSULTAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_ENTIDADES",response, parameters);
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_CONSULTAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_ENTIDADES"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorConsultar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
			}
			return response;
		}

	}
}
